
package com.wyzz.hr.bo.impl;

import java.util.List;
import org.hibernate.criterion.*;

import com.wyzz.hr.bo.IOuperfcriteriaBo;
import com.wyzz.hr.dao.IOuperfcriteriaDao;
import com.wyzz.hr.pojo.Department;
import com.wyzz.hr.pojo.Ouperfcriteria;
import com.wyzz.hr.pojo.PositionBase;


public class OuperfcriteriaBoImpl implements IOuperfcriteriaBo {

	public OuperfcriteriaBoImpl() {
	}

	public IOuperfcriteriaDao getOuperfcriteriaDao() {
		return ouperfcriteriaDao;
	}

	public void setOuperfcriteriaDao(IOuperfcriteriaDao ouperfcriteriaDao) {
		this.ouperfcriteriaDao = ouperfcriteriaDao;
	}

	public List getPbPerfcriteria(String pbId) {
		DetachedCriteria dc = DetachedCriteria
				.forClass(com.wyzz.hr.pojo.Ouperfcriteria.class);
		dc.add(Restrictions.eq(Ouperfcriteria.PROP_OUP_PB, new PositionBase(
				pbId)));
		dc.addOrder(Order.asc(Ouperfcriteria.PROP_OUP_SORT_ID));
		return ouperfcriteriaDao.findByCriteria(dc);
	}

	public List getDeptPerfcriteria(String deptId) {
		DetachedCriteria dc = DetachedCriteria
				.forClass(com.wyzz.hr.pojo.Ouperfcriteria.class);
		dc.add(Restrictions.eq(Ouperfcriteria.PROP_OUP_DEPT, new Department(
				deptId)));
		dc.addOrder(Order.asc(Ouperfcriteria.PROP_OUP_SORT_ID));
		return ouperfcriteriaDao.findByCriteria(dc);
	}

	public boolean addPbPerfcr(Ouperfcriteria pbPerfcr) {
		boolean duplicateName = duplicateName(pbPerfcr, "add");
		if (!duplicateName) {
			pbPerfcr.setOupSortId(Integer.valueOf(0));
			ouperfcriteriaDao.saveObject(pbPerfcr);
			return true;
		} else {
			return false;
		}
	}

	private boolean duplicateName(Ouperfcriteria perfcr, String operate) {
		DetachedCriteria dc = DetachedCriteria
				.forClass(com.wyzz.hr.pojo.Ouperfcriteria.class);
		if (perfcr.getOupPb() == null)
			dc.add(Restrictions.eq(Ouperfcriteria.PROP_OUP_DEPT, perfcr
					.getOupPb()));
		else
			dc.add(Restrictions.eq(Ouperfcriteria.PROP_OUP_PB,
					new PositionBase(perfcr.getOupPb().getId())));
		dc.add(Restrictions.eq(Ouperfcriteria.PROP_OUP_NAME, perfcr
				.getOupName()));
		if (operate.equals("update"))
			dc.add(Restrictions.not(Restrictions.eq(Ouperfcriteria.PROP_ID,
					perfcr.getId().trim())));
		List result = ouperfcriteriaDao.findByCriteria(dc);
		return result != null && result.size() != 0;
	}

	public boolean updatePbPerfcr(Ouperfcriteria pbPerfcr) {
		boolean duplicateName = duplicateName(pbPerfcr, "update");
		if (!duplicateName) {
			Ouperfcriteria old = (Ouperfcriteria) ouperfcriteriaDao.loadObject(
					com.wyzz.hr.pojo.Ouperfcriteria.class, pbPerfcr.getId(),
					null, new boolean[0]);
			old.setOupName(pbPerfcr.getOupName());
			old.setOupRate(pbPerfcr.getOupRate());
			ouperfcriteriaDao.updateObject(old);
			return true;
		} else {
			return false;
		}
	}

	public boolean delPbPerfcr(String id) {
		try {
			ouperfcriteriaDao.deleteObject(
					com.wyzz.hr.pojo.Ouperfcriteria.class, id);
			return true;
		} catch (RuntimeException e) {
			e.printStackTrace();
		}
		return false;
	}

	public void savePbPerfcrOrder(String ids[]) {
		if (ids == null)
			return;
		int sort = 1;
		int len = ids.length;
		for (int i = 0; i < len; i++) {
			ouperfcriteriaDao.exeHql((new StringBuilder()).append(
					"update Ouperfcriteria set oupSortId=").append(sort)
					.append(" where id ='").append(ids[i]).append("'")
					.toString());
			sort++;
		}

	}

	private IOuperfcriteriaDao ouperfcriteriaDao;
}
